package com.note.app.config;

import com.netflix.loadbalancer.IRule;
import com.netflix.loadbalancer.RandomRule;
import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
import org.springframework.cloud.client.loadbalancer.LoadBalanced;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.http.client.SimpleClientHttpRequestFactory;
import org.springframework.web.client.RestTemplate;

/**
 * RestTemplate配置类
 */
@Configuration
public class RestTemplateConfig {

    /**
     * 创建RestTemplate Bean
     *
     * @return RestTemplate
     */
    /* 用于服务间调用的RestTemplate - 开启负载均衡 */
    @Bean
    @LoadBalanced
    @Primary
    @ConditionalOnProperty(name = "spring.cloud.loadbalancer.enabled", havingValue = "true", matchIfMissing = true)
    public RestTemplate restTemplate() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(10000); // 连接超时时间（毫秒）
        factory.setReadTimeout(30000); // 读取超时时间（毫秒）

        return new RestTemplate(factory);
    }

    /**
     * 创建用于外部API调用的RestTemplate Bean
     * 具有更长的超时时间，适合调用AI服务等耗时操作
     *
     * @return RestTemplate
     */
    @Bean("externalRestTemplate")
    public RestTemplate externalRestTemplate() {
        SimpleClientHttpRequestFactory factory = new SimpleClientHttpRequestFactory();
        factory.setConnectTimeout(20000); // 连接超时时间（毫秒）
        factory.setReadTimeout(120000); // 读取超时时间（毫秒）
        factory.setBufferRequestBody(false); // 不缓冲请求体，避免大请求的内存问题

        return new RestTemplate(factory);
    }


    /* 负载均衡策略 */
    @Bean
    public IRule randomRule() {
        return new RandomRule();
    }
}